import axios from "axios";

const http = axios.create({
  baseURL: import.meta.env.BASE_API,
  timeout: 60000,
  headers: {
    "Content-Type": "application/json",
  },
});

http.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem("token");
    if (token) config.headers["Authorization"] = `Bearer ${token}`;

    return config;
  },
  (error) => {
    console.error("请求拦截器错误:", error);
    return Promise.reject(error);
  }
);

http.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    console.error("响应拦截器错误:", error);
    // 统一错误处理，例如网络错误、服务器错误等
    if (error.response) {
      // 请求已发出，但服务器响应状态码不在 2xx 范围内
      console.error("Status:", error.response.status);
      console.error("Data:", error.response.data);
      console.error("Headers:", error.response.headers);
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error("No response received:", error.request);
    } else {
      // 在设置请求时引发了一些事情，并触发了一个错误
      console.error("Error message:", error.message);
    }
    // 这里可以触发全局的错误提示
    return Promise.reject(error);
  }
);

function request(url: string, method: string, data = {}, params: string, success: any, fail: any) {
  const config = {
    url: url,
    method: method,
    params: params,
    data: data, // 请求体数据
  };

  http(config)
    .then((res) => {
      // 这里的 res 已经是 service.interceptors.response.use 处理后的 data
      if (success && typeof success === "function") {
        success(res);
      }
    })
    .catch((err) => {
      if (fail && typeof fail === "function") {
        fail(err);
      } else {
        // 如果没有提供 failure 回调，可以进行默认错误处理
        console.error(`请求 ${url} 失败:`, err);
      }
    });
}

const api = {
  get(url: string, data = {}, params: string, success: any, fail?: any) {
    request(url, "get", data, params, success, fail);
  },
  post(url: string, data = {}, params: string, success: any, fail?: any) {
    request(url, "post", data, params, success, fail);
  },
};

export default api;
